package config

import (
    "fmt"
    "github.com/fsnotify/fsnotify"
    "github.com/spf13/viper"
)

type Config struct {
    Server struct{
        Host string
        Port int
        Mode string
    }
    Mysql struct {
        Host string
        Port int
        User string
        PassWord string
        DataBase string
    }
    Secret string
}

// 声明全局变量
var Conf *Config

func init () {
    // 指定配置文件
    viper.SetConfigFile("config/config.yaml")
    // 指定配置文件的路径
    //viper.AddConfigPath("config")
    // 读取配置文件信息
    err := viper.ReadInConfig()
    if err != nil {
        panic(fmt.Errorf("Read config error: %s \n", err))
    }

    // 把读取的配置 赋值 给全局变量 config
    if err := viper.Unmarshal(&Conf); err != nil {
        panic(fmt.Errorf("Unmarshal config error: %s \n", err))
    }

    // 监控配置文件的变化
    viper.WatchConfig()
    viper.OnConfigChange(func(in fsnotify.Event) {
        // 配置文件变化后，重新同步配置信息到 config
        if err := viper.Unmarshal(&Conf); err != nil {
            panic(fmt.Errorf("Unmarshal config error: %s \n", err))
        }
    })
}